home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / 071-080 / amok77 / ifflib / ifflib.mod < prev    next >
Text File  |  1993-11-04  |  8KB  |  234 lines

  1. (*---------------------------------------------------------------------------
  2.     :Program.    IFFLib
  3.     :Author.     Volker Rudolph/Thomas Wagner & Frédéric Pröls
  4.     :Version.    1.2
  5.     :Copyright.  PD
  6.     :Language.   Oberon
  7.     :Translator. Amiga-Oberon V2.14
  8.     :Imports.    iff.library - Christian A. Weber
  9.     :Contents.   Oberon library-module for iff.library
  10.     :Remark.     Needs iff.library (Version 22 or higher) in libs: directory
  11.     :Remark.     This ist the Oberon-version of the
  12.     :Remark.     IFFLib-Module for M2Amiga by Fridtjof Siebert
  13.     :History.    V1.0 by Volker Rudolph
  14.     :History.    V1.1 by Thomas Wagner & Frédéric Pröls
  15.     :History.         Update to iff.library version 22 (29-Jul-92)
  16.     :History.    V1.2 by F. Siebert small chgs. for Amiga Oberon 3.0
  17.     :bugs.       not tested
  18. ---------------------------------------------------------------------------*)
  19.  
  20. MODULE IFFLib;
  21.  
  22. IMPORT e := Exec,
  23.             Graphics,
  24.        i := Intuition,
  25.        sys:=SYSTEM;
  26.  
  27. CONST
  28.   iffName * = "iff.library";
  29.   iffVersion * = 22;                  (* Current library version *)
  30.  
  31.  
  32. (************** E R R O R - C O D E S ***********************************)
  33.  
  34. errorbadTask         * =     -1;      (* IffError() called by wrong task *)
  35. erroropen            * =     16;      (* Can't open file *)
  36. errorread            * =     17;      (* Error reading file *)
  37. errornoMem           * =     18;      (* Not enough memory *)
  38. errornotIff          * =     19;      (* File is not an IFF file *)
  39. errorwrite           * =     20;      (* Error writing file *)
  40. errornoILBM          * =     24;      (* IFF file is not of type ILBM *)
  41. errornoBMHD          * =     25;      (* BMHD chunk not found *)
  42. errornoBODY          * =     26;      (* BODY chunk not found *)
  43. errorbadCompression  * =     28;      (* Unknown compression type *)
  44. errornoANHD          * =     29;      (* ANHD chunk not found *)
  45. errornoDLTA          * =     30;      (* DLTA chunk not found *)
  46.  
  47. (************** Common IFF IDs ******************************************)
  48.  
  49. (*
  50.  * Universal IFF identifiers.
  51.  *)
  52.  
  53.   idFORM  * = sys.VAL(LONGINT,"FORM");
  54.   idLIST  * = sys.VAL(LONGINT,"LIST");
  55.   idCAT   * = sys.VAL(LONGINT,"CAT ");
  56.   idPROP  * = sys.VAL(LONGINT,"PROP");
  57.   idNULL  * = sys.VAL(LONGINT,"    ");
  58.  
  59. (*
  60.  *      Specific IFF IDs
  61. *)
  62.  
  63.   idANIM  * = sys.VAL(LONGINT,"ANIM");
  64.   idANHD  * = sys.VAL(LONGINT,"ANHD");
  65.   idANNO  * = sys.VAL(LONGINT,"ANNO");
  66.   idBMHD  * = sys.VAL(LONGINT,"BMHD");
  67.   idBODY  * = sys.VAL(LONGINT,"BODY");
  68.   idCAMG  * = sys.VAL(LONGINT,"CAMG");
  69.   idCLUT  * = sys.VAL(LONGINT,"CLUT");
  70.   idCMAP  * = sys.VAL(LONGINT,"CMAP");
  71.   idCRNG  * = sys.VAL(LONGINT,"CRNG");
  72.   idCTBL  * = sys.VAL(LONGINT,"CTBL");
  73.   idDLTA  * = sys.VAL(LONGINT,"DLTA");
  74.   idILBM  * = sys.VAL(LONGINT,"ILBM");
  75.   idSHAM  * = sys.VAL(LONGINT,"SHAM");
  76.  
  77.   id8SVX  * = sys.VAL(LONGINT,"8SVX");
  78.   idATAK  * = sys.VAL(LONGINT,"ATAK");
  79.   idNAME  * = sys.VAL(LONGINT,"NAME");
  80.   idRLSE  * = sys.VAL(LONGINT,"RLSE");
  81.   idVHDR  * = sys.VAL(LONGINT,"VHDR");
  82.  
  83. (****************************************************************************
  84.  *      Modes for OpenIFF()
  85.  *)
  86.  
  87.   modeRead  * = 0;
  88.   modeWrite * = 1;
  89.  
  90.  
  91. (****************************************************************************
  92.  *      Modes for CompressBlock() and DecompressBlock()
  93.  *)
  94.  
  95. comprNone       * =  0000H;          (* generic *)
  96. comprByteRun1   * =  0001H;          (* ILBM *)
  97. comprFibDelta   * =  0101H;          (* 8SVX *)
  98.  
  99.  
  100.  
  101. (************** S T R U C T U R E S *************************************)
  102.  
  103. TYPE
  104.   HandlePtr * = UNTRACED POINTER TO Handle;
  105.   Handle    * = RECORD                   (* private ! *)
  106.     file      : e.BPTR;       (* DOS file handle *)
  107.     formSize  : LONGINT;      (* Größe des gesamten FORM *)
  108.     chunkSize : LONGINT;      (* Größe des aktuellen Chunks *)
  109.     chunkFPos : LONGINT;      (* Position im File wo dieser Chunk beginnt *)
  110.   END;
  111.  
  112.   ChunkPtr * = UNTRACED POINTER TO Chunk;
  113.   Chunk    * = RECORD
  114.     ckID   * : LONGINT;
  115.     ckSize * : LONGINT;
  116.     ckData * : ARRAY 1048576 OF SHORTINT; (* ARRAY ckSize OF SHORTINT *)
  117.   END;
  118.  
  119.   BitMapHeaderPtr * = UNTRACED POINTER TO BitMapHeader;
  120.   BitMapHeader    * = RECORD
  121.     w* , h*, x*, y   * : INTEGER;
  122.     nPlanes          * : SHORTINT;
  123.     masking          * : SHORTINT;
  124.     compression      * : SHORTINT;
  125.     pad1             * : SHORTINT;
  126.     transparentColor * : INTEGER;
  127.     xAspect          * : SHORTINT;
  128.     yAspect          * : SHORTINT;
  129.     pageWidth        * : INTEGER;
  130.     pageHeight       * : INTEGER;
  131.   END;
  132.  
  133.   AnimHeaderPtr * = UNTRACED POINTER TO AnimHeader;
  134.   AnimHeader    * = RECORD
  135.     operation  * : SHORTINT;
  136.     mask       * : SHORTINT;
  137.     w*,h*,x*,y * : INTEGER;
  138.     absTime    * : LONGINT;
  139.     relTime    * : LONGINT;
  140.     interLeave * : SHORTINT;
  141.     pad0       * : SHORTINT;
  142.     bits       * : LONGINT;
  143.     pad        * : ARRAY 16 OF SHORTINT;
  144.   END;
  145.  
  146. (*********************** L I B R A R Y - B A S E ************************)
  147.  
  148. VAR
  149.   base * : e.LibraryPtr;
  150.  
  151. (************** F U N C T I O N   D E C L A R A T I O N S ***************)
  152.  
  153. (* obsolete *)
  154. PROCEDURE OldOpenIFF * {base,-30}(fileName{8}: ARRAY OF CHAR): HandlePtr;
  155.  
  156. PROCEDURE CloseIFF * {base,-36}(iffFile{9}: HandlePtr);
  157.  
  158. PROCEDURE FindChunk * {base,-42}(iffFile{9}: HandlePtr;
  159.                                  hunkName{0}: LONGINT): ChunkPtr;
  160.  
  161. PROCEDURE GetBMHD * {base,-48}(iffFile{9}: HandlePtr): BitMapHeaderPtr;
  162.  
  163. PROCEDURE GetColorMap * {base,-54}(iffFile{9}: HandlePtr;
  164.                                    colorTable{8}: ARRAY OF INTEGER): LONGINT;
  165.  
  166. PROCEDURE DecodePic * {base,-60}(iffFile{9}: HandlePtr;
  167.                                  bitmap{8}: Graphics.BitMapPtr): BOOLEAN;
  168.  
  169. PROCEDURE SaveBitMap * {base,-66}(fileName{8}: ARRAY OF CHAR;
  170.                                   bitMap{9}: Graphics.BitMapPtr;
  171.                                   colorTable{10}: ARRAY OF CHAR;
  172.                                   flags{0}: SET): BOOLEAN;
  173.  
  174. PROCEDURE SaveClip * {base,-72}(fileName{8}: ARRAY OF CHAR;
  175.                                 bitmap{9}: Graphics.BitMapPtr;
  176.                                 coltab{10}: ARRAY OF CHAR;
  177.                                 flags{0}: SET;
  178.                                 xoff{1}, yoff{2}: INTEGER;
  179.                                 width{3}, height{4}: INTEGER): BOOLEAN;
  180.  
  181. PROCEDURE IffError * {base,-78}(): LONGINT;
  182.  
  183. PROCEDURE GetViewModes * {base,-84}(iffFile{9}: HandlePtr): LONGSET;
  184.  
  185. (* private and obsolete *)
  186. PROCEDURE OldNewOpenIFF * {base,-90}(name{8}: ARRAY OF CHAR;
  187.                                      memattr{0}: LONGSET): e.ADDRESS;
  188.  
  189. PROCEDURE ModifyFrame * {base,-96}(modifyform{9}: e.APTR;
  190.                                    bitmap{8}: Graphics.BitMapPtr);
  191.  
  192. PROCEDURE OpenIFF * {base, -120}(name{8}: ARRAY OF CHAR;
  193.                                  mode{0}: LONGINT): HandlePtr;
  194.  
  195. PROCEDURE PushChunk * {base, -126}(iff{8}: HandlePtr;
  196.                                    type{0}: LONGINT;
  197.                                    id{1}: LONGINT);
  198.  
  199. PROCEDURE PopChunk * {base, -132}(iff{8}: HandlePtr): BOOLEAN;
  200.  
  201. PROCEDURE WriteChunkBytes * {base, -138}(iff{8}: HandlePtr;
  202.                                          buf{9}: ARRAY OF CHAR;
  203.                                          size{0}: LONGINT);
  204.  
  205. PROCEDURE CompressBlock * {base, -144}(source{8}: ARRAY OF sys.BYTE;
  206.                                        VAR destination{9}: ARRAY OF sys.BYTE;
  207.                                        size{0}: LONGINT;
  208.                                        mode{1}: LONGSET);
  209.  
  210. PROCEDURE DecompressBlock * {base, -150}(source{8}: ARRAY OF sys.BYTE;
  211.                                          VAR destination{9}: ARRAY OF sys.BYTE;
  212.                                          size{0}: LONGINT;
  213.                                          mode{1}: LONGSET);
  214.  
  215.  
  216.  
  217. (* $OvflChk- $RangeChk- $StackChk- $NilChk- $ReturnChk- $CaseChk- *)
  218. BEGIN
  219.  
  220.  base :=  e.OpenLibrary(iffName,iffVersion);
  221.  IF base = NIL THEN
  222.    IF i.DisplayAlert(0,"\x00\x64\x14missing iff.library V22\o\o",50) THEN END;
  223.    HALT(20)
  224.  END; (* IF *)
  225.  
  226. CLOSE
  227.  
  228.   IF base # NIL THEN
  229.     e.CloseLibrary(base)
  230.   END; (* IF *)
  231.  
  232. END IFFLib.
  233.  
  234.